
Zelf programmeren in Oedipus II nu makkelijk gemaakt met de Oedipus II ontwikkel kit (OOK) voor Odp Plug-Ins.Wat is een Odp Plug-In.Het ideale genealogie programma bestaat niet. En dat zal ook wel nooit geschreven worden. Iedereen stelt weer andere eisen en heeft andere wensen. Zoveel mensen, zoveel zinnen. En dat is maar goed ook.
.
De OOK stelt u in staat om onafhankelijk van iedereen toepassingen te schrijven in de vorm van Plug-Ins, die gebruik maken van de Oedipus structuur. U hebt hierbij de volledige controle over alle gegevens. U kunt dus ten alle tijde de gegevens uit de Oedipus database halen en transformeren tot elk ander formaat. In de OOK voorbeelden om de gegevens in Tabs begrensd formaat naar een bestand te schrijven. Dit bestand kan in bijv. MS-Excel worden ingelezen.
Odp Plug-Ins zijn programma's in de vorm van een DLL (Dynamic Linked Library). Ze kunnen onafhankelijk van Oedipus worden samengesteld.Wat hebt u nodig.De entree functie van de DLL heet RunUser(void) of RunOpi(void) en moet aan een paar voorwaarden voldoen.
De interface met het Oedipus programma is de ontwikkel kit.De Plug-Ins worden automatisch in het Oedipus menu systeem opgenomen onder 'procedures'. De tekst van de menu ingang kunt u zelf bepalen.
Zelf gebruik ik Borland C++ 4.5. Deze was nieuw in 1994 en nu dus sterk verouderd, waarschijnlijk kunt u hem voor een paar tientje op een PC dumpdag wel op de kop tikken. Mogelijk kunt hem ook nog wel ergens bietsen voor nop. De verstrekte voorbeelden kunt u hier zonder meer in inlezen en eventueel aanpassen. Succes verzekerd.
(En denk nu niet dat deze compiler minder waardig is. U kunt hier alles mee doen wat u wilt!)Andere C++ compiler?
Als het Borland C++ 5 of een Builder is, dan zal dat waarschijnlijk zonder grote problemen gaan.
Niet Borland ligt mogelijk iets moeilijker. Ik heb daar zelf geen ervaring mee, maar moet zonder al te grote problemen kunnen. Ik geef hiervoor ook een interface.Mogelijk dat met Delphi zelfs nog wel iets te doen is. Dat zouden we aan de Delphi goeroes moeten vragen.
Hier drie gratis Windows C++ compilers. Ik heb er geen ervaring mee.
Neem er ook de gratis IDE bij, want zonder IDE valt er eigenlijk niet te werken.
- GNU-Win32
- LCC-Win32
- SuperIDE
- IDE for C++ and Java
En er zijn er meer! Of neem alles in een.
- De Dev-C++3.0 Compiler + IDE is gebaseerd op de Mingw32 compiler van Jan Jaap van der Heijden
Moet u eerst nog even uw C/C++ kennis opfrissen? Hieronder een aantal tutorials en FAQs.
C tutorial
C Programming Reference
Programming in C Hier een aantal boeken, ook de originele tekt door Kernighan and Ritchie (staat bekend als K&R).
C++ Tutorial
introductie to c++
C++ Faq
The C++ Programming Language Bjarne Stroustrup. (Lees wat deze genie te vertellen heeft!)
DLL Tutorial voor de Builder
K&R
Jon's C++ Directory Hier nog meer!
Allereerst de vier bestanden waar de hele functionaliteit in zit.
Voorbeelden(Odp40.exe Vervangt de oude Odp40.exe. In deze zit de Plug-In functionaliteit.) Zit reeds in Odp4.26 OpiSys.hpp header file. Moet in uw applicatie worden ge"#include" OpiSys.lib bibliotheek definities voor de export functies.. (OpiSys.dll bibliotheek met systeem functies. Moet in uw applicatie worden gelinkt en moet in de Oedipus directory staan.) Zit reeds in Odp4.26.
Voorbeelden met de volledige source. Hier kunt u meteen mee aan de slag.
De annotatie in de voorbeelden is een onderdeel van de Handleiding!!
Het eerste voorbeeld is in 'plain' Windows. Deze is geschikt voor elke C++ compiler. De routine is erg simple gehouden en dient alleen ter illustratie. Het is aan te bevelen om hier mee te beginnen. De routine selecteert van de eerste honderd kaarten in een database drie velden en schrijft die als tabs begrensd naar een bestand. Dit bestand kan in MS-EXCEL worden ingelezen.
Down loaden
HIER! OOK007
Verplichte structuur van de Start functie
OpiSystem *System; // Globale pointer naar Oedipus
void _export RunUser(void)
// De verplichte start functie in uw applicatie.
{
System = new OpiSystem();
// Maak contact met Oedipus system
hWnd=(HWND)System->GetHandle(HWINDOW);
// creeer de handle naar Oedipus MainWindow in platte Windows stijl
pParent=(TWindow*)System->GetHandle(TWINDOW); // of creeer
de handle naar Oedipus MainWindow in Borlands OWL stijl
hier komt uw eigen code
delete System;
// Contact verbreken.
}
#define ODPVERSION 818Verplichte naamgeving van de Plug-Ins
#define ROUTINE 1200STRINGTABLE
{
ODPVERSION, "1.00" // Hier kunt u uw versie nummer geven. Het verdient aanbeveling om
// dezelfde te nemen als die in OpiSys.dll zit
ROUTINE, "Test OWL Plug In" // en hier de tekst voor het menu
}
Om Oedipus in staat te stellen de Plug-Ins te vinden moeten ze in de Oedipus directory staan en moet de naam zijn OpiUser1.dll, OpiUser2.dll enz. tot met OpiUser8.dll.
Handleiding
Momenteel zijn er twee classes in de ontwikkel kit beschikbaar:
Zie ook de voorbeelden!!
class OpiSystem
OpiSystem(void); constructorclass Indi_Sheetint FieldName(int ref, char *buf); geeft tekst veld label, zie voorbeeld twee.
void *GetHandle(int i); geeft de handle met de Oedipus MainWindow
i kan zijn HWINDOW of TWINDOW voor
resp. HWND of TWindow*
constructor
Indi_Sheet(int Tag, OpiSystem *System); // type 1
Indi_Sheet(Indi_Sheet *Kaart, int Fpos=0); // type 2functies
int Field(int Fpos, char *buf, int *ref); // Geeft het Fpos veld
int NextField(char *buf, int *ref); // Geeft het volgende veld
int Compare(Indi_Sheet *Kaart); // vergelijkt twee kaarten
int Status(void); // geeft status kaart
int FieldType(int Ftype, char *buf, int numField=0); // geeft veldtype in buf
int Place(int Ftype, char *buf, Indi_Sheet *hKaart=NULL); // geeft plaatsnaam in buf van Ftype
int Date (int Ftype, char *buf, Indi_Sheet *hKaart=NULL); // geeft datum in buf van Ftype
Indi_Sheet *CreateSheet(int Ftype, int numMar=0); // creeert een Kaart van FtypeDe laatste drie functies zijn volledig in de andere functies uit te drukken. Echter om de snelheid op te voeren,. heb ik ze in deze class geplaatst.
variabelen
Indi_Sheet *Ext; Om een linked list te maken
int Id; Identificatie
char *StId; wordt vrijgegeven als delete[], dus alleen vullen met new char[i]Toepassingen
Hebt u een kaart geceeerd, dan kan de inhoud van de velden worden opgevraagd als volgt.
1) Fpos=Kaart->NextField(buf, &ref);
geeft het volgende veld,begint met het eerste
2) Fpos=Kaart->Field(Fpos, buf, &ref);
geeft het veld op positie Fpos
Field() resets de veld pointer.
Kijken of twee kaarten dezelfde zijn, gaat met:
if(Kaart1->Compare(Kaart2)==1) Kaart1 en Kaart2 zijn gelijk.
Status van de kaartok=Kaart->Place(GEBOREN,buf); // geeft geboorte plaatsKaart->Status() == SHT_OK (alles ok)
SHT_FOC (geen kaart op het scherm)
SHT_NEXT (Kaarten zijn op)
SHT_OPI (Geen OpiSystem)
SHT_EMPTY (Kaart leeg)ok=Kaart->FieldType(FOTO, buf); // geeft het pad naar de pasfoto. Dit is momenteel de enige toepassing
// ok=0 er is iets mis, ok=1 succes
ok=Kaart->Date (DOOP,buf);
// zie hier boven m. m.
KaartVader=KaartZoon->CreateSheet(VADER); // creeert Kaart van de vader KaartVrouw=KaartMan->CreateSheet(PARTNER); // creeert Kaart van partner KaartenKinderen=KaartPa->CreateSheet(KIND, KaartMa); // creeert de kaarten van de kinderen als een linked list
Zoals gezegd: dit is een eerste aanzet. Ik heb geen idee waar ik aan
begin. Misschien is het wel weer een flop.
Het ligt in de bedoeling om meer functies te creeren.
Op- en aanmerkingen stel ik zeer op prijs.
Een probleem kan ik nu al voorzien. Door de 'name mangling', kan het
zijn dat Oedipus de RunUser() functie in de DLL niet kan vinden.
Overkomt u dit, geef me dan een seintje. Dan zal ik daar iets op verzinnen.
O ja, vergeten te vermelden. De Plug-Ins zitten achter het wachtwoord! Bestanden van anderen kunnen dus niet worden geplunderd!
Wilt u op de hoogte worden gehouden van veranderingen, geef me dan een mailtje.